#include "Salle.h"

void initSalle(Salle*salle,int numSalle,char* intitule)
{
    assert(salle!=NULL);
    salle->numSalle=numSalle;
    salle->intitule=intitule;
}

Salle	*	creSalle(int numSalle,char* intitule)
{
    Salle * salle=calloc(1,sizeof(Salle));
    initSalle(salle,numSalle,intitule);
    return salle;

}

void detSalle(Salle ** salle)
{
    assert(*salle);
    (*salle)->numSalle=0;
    (*salle)->intitule=NULL;
    free(*salle);
}

void saveSalle(Salle*salle)
{
    FILE* f;

    f = fopen(SALLE_DB, "a");

    if (f==NULL)
    {
        printf("Erreur lors de l'ouverture de %s\n", SALLE_DB);
        exit(EXIT_FAILURE);
    }

    if(recSalleParCode(salle->numSalle) == NULL)
    {


        char*cnum=calloc(20,sizeof(char));

        sprintf(cnum,"%d",salle->numSalle);

        char*chaine=calloc(100,sizeof(char));

        strcat(chaine,cnum);
        strcat(chaine,":");
        strcat(chaine,salle->intitule);
        strcat(chaine,"\n");
        fputs(chaine, f);

        free(cnum);
        free(chaine);
    }
    else
        printf("Salle  deja presente dans la base de donnée!!!!!\n");

    fclose(f);
}

void mdfSalle(Salle*salle,Salle*sallenew)
{
    assert(salle!=NULL && sallenew!=NULL);
    supSalle(salle);
    saveSalle(sallenew);
}

int supSalle(Salle*salle)
{
    char *contenu=calloc(100,sizeof(char));
    FILE * fIn;
    FILE * fOut;

    if ((fIn = fopen(SALLE_DB, "r")) == NULL)
        return EXIT_FAILURE;

    if ((fOut = fopen("texte.tmp", "w")) == NULL)
    {
        fclose(fIn);
        return EXIT_FAILURE;
    }

    while (fgets(contenu,100, fIn))
    {
        char * ligne=calloc(100,sizeof(char));
        copStr(&ligne,contenu);
        char**tabor=g_strsplit((gchar*)contenu,(gchar*)"\n",100);
        char**tab=g_strsplit((gchar*)tabor[0],(gchar*)":",100);
        if (atoi(tab[0]) != salle->numSalle)
            fputs(ligne, fOut);
        free(ligne);
        free(tabor);
        free(tab);
    }
    free(contenu);

    fclose(fIn);
    fclose(fOut);

    rename("texte.tmp", SALLE_DB);
      return 0;
}

Salle*   recSalleParCode(int numSalle)
{
    FILE* f;
    f = fopen(SALLE_DB, "r");

    if (f==NULL)
    {
        printf("Erreur lors de l'ouverture de %s\n", SALLE_DB);
        exit(EXIT_FAILURE);
    }

    char* contenu=calloc(100,sizeof(char));
    while(fgets(contenu,100,f)!=NULL)
    {
        char**tabor=g_strsplit((gchar*)contenu,(gchar*)"\n",100);
        char**tab=g_strsplit((gchar*)tabor[0],(gchar*)":",100);
        if(numSalle == atoi(tab[0]))
        {
            fclose(f);
            return creSalle(atoi(tab[0]),tab[1]);
        }
        free(tabor);
        free(tab);
    }
    free(contenu);

    if(!feof(f))
        printf("autre probleme \n");

    fclose(f);
    return NULL;
}

